package com.watermark;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Point;

import androidx.annotation.ColorInt;
import androidx.annotation.FloatRange;

public interface IWaterMark {

    /**
     * 设置预览size
     *
     * @param previewSize 预览size
     */
    void setPreviewSize(Point previewSize);

    /**
     * 设置文字水印背景色
     *
     * @param wartMarkBackgroundColor 文字水印的背景色 默认：透明
     */
    void setWartMarkBackgroundColor(@ColorInt int wartMarkBackgroundColor);

    /**
     * 设置水印文字的颜色
     *
     * @param wartMarkTextColor 文字水印的背景色 默认：白色
     */
    void setWartMarkTextColor(@ColorInt int wartMarkTextColor);

    /**
     * 设置水印文字的大小
     *
     * @param textSize 水印文字的大小 默认：14sp
     */
    void setWartMarkTextSize(int textSize);

    /**
     * 设置水印文字的行间据
     *
     * @param lineSpace 行间距
     */
    void setWaterMarkLineSpace(int lineSpace);

    /**
     * 设置水印的偏移量
     *
     * @param offsetX x 方向偏移比例 范围：0~1
     * @param offsetY Y 方向偏移比例 范围：0~1
     */
    void setWaterMarkOffset(@FloatRange(from = 0, to = 1) float offsetX,
                            @FloatRange(from = 0, to = 1) float offsetY);

    /**
     * 设置水印的偏移量
     *
     * @param offsetX x 方向偏移量
     * @param offsetY Y 方向偏移量
     */
    void setWaterMarkOffset(int offsetX, int offsetY);

    /**
     * 设置文字水印绘制的画布大小
     *
     * @param width  水印画布的宽
     * @param height 水印画布的高
     */
    void setWaterMarkSize(int width, int height);

    /**
     * 文字转图片
     *
     * @param marks  水印文字
     * @param width  宽
     * @param height 高
     * @return 图片
     */
    Bitmap transMark(String[] marks, int width, int height);

    /**
     * @param autoLineFeed 是否支持自动换行
     */
    void enableAutoLineFeed(boolean autoLineFeed);

    /**
     * 设置文字水印
     *
     * @param marks 水印文字
     */
    void setWaterMark(String[] marks);

    /**
     * 设置文字水印
     *
     * @param marks  水印文字
     * @param width  水印画布的宽
     * @param height 水印画布的高
     */
    void setWaterMark(String[] marks, int width, int height);

    /**
     * 设置文字水印
     *
     * @param marks   水印文字
     * @param width   水印画布的宽
     * @param height  水印画布的高
     * @param offsetX x轴方向偏移量
     * @param offsetY y轴方向偏移量
     */
    void setWaterMark(String[] marks, int width, int height, int offsetX, int offsetY);


    /**
     * 设置 图片水印
     *
     * @param mark 图片水印
     */
    void setWaterMark(Bitmap mark);

    /**
     * 设置 图片水印
     *
     * @param mark   图片水印
     * @param startX 起始位置 x 坐标
     * @param startY 起始位置 y 坐标
     */
    void setWaterMark(Bitmap mark, int startX, int startY);

    /**
     * 在给定的画布上绘制水印
     *
     * @param canvas 画布
     */
    void drawWaterMark(Canvas canvas);

    /**
     * @return 是否有水印
     */
    boolean hasWaterMark();

    /**
     * 测量水印文字
     *
     * @param mark      水印文字
     * @param lineSpace 是否计算行间距
     * @return rect
     */
    Point measureText(String[] mark, boolean lineSpace);
}
